import { defineConfig, loadEnv } from 'vite'
import path from 'path'
import createVitePlugins from './vite/plugins'

/**
 * 定义Vite配置函数
 * @param {Object} params - 配置参数对象
 * @param {string} params.mode - 当前环境模式（如 'development'/'production'）
 * @param {string} params.command - 当前运行命令（'serve' 开发模式 / 'build' 生产模式）
 * @returns {import('vite').UserConfig} Vite配置对象
 */
export default defineConfig(({ mode, command }) => {
  // 加载环境变量
  const env = loadEnv(mode, process.cwd())
  const { VITE_APP_ENV } = env
  
  return {
    // 基础公共路径配置（根据环境变量动态设置）
    base: VITE_APP_ENV === 'production' ? '/' : '/',
    
    // 动态创建Vite插件（传入环境变量和构建状态）
    plugins: createVitePlugins(env, command === 'build'),
    
    // 模块解析配置
    resolve: {
      // 路径别名映射
      alias: {
        '~': path.resolve(__dirname, './'),     // 项目根目录别名
        '@': path.resolve(__dirname, './src')   // 源码目录别名
      },
      // 自动解析的文件扩展名列表
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
    },
    
    // 开发服务器配置
    server: {
      port: 8081,      // 服务器端口
      host: true,       // 监听所有网络接口
      open: true,       // 启动时自动打开浏览器
      // 代理配置
      proxy: {
        '/dev-api': {
          target: 'http://localhost:9090',  // 代理目标地址
          // target: 'http://175.178.237.105:9090',
          changeOrigin: true,               // 启用源地址更改
          rewrite: (p) => p.replace(/^\/dev-api/, '')  // 路径重写规则
        }
      }
    },
    
    // CSS处理配置
    css: {
      // PostCSS插件配置
      postcss: {
        plugins: [
          {
            // 自定义插件：移除CSS中的@charset规则
            postcssPlugin: 'internal:charset-removal',
            AtRule: {
              charset: (atRule) => {
                if (atRule.name === 'charset') {
                  atRule.remove()
                }
              }
            }
          }
        ]
      }
    }
  }
})